Hasher에게 먹이 주기 feed Hasher

pub trait Hash {
	fn hash<H>(&self, state: &mut H)
	where H: Hasher;
}

예시

struct Person {
    id: u32,
    name: String,
    phone: u64,
}

impl Hash for Person {
    fn hash<H: Hasher>(&self, state: &mut H) {
        self.id.hash(state);
        self.phone.hash(state);
    }
}

Disclaimer: Hash and Eq

두 변수의 해시값이 같으면 반드시 eq가 참이어야 한다.

Disclaimer: Prefix Collisions

예를 들어 다음과 같은 경우에 Prefix Collision이 발생한다.

["he", "llo"].hash(state1);
["hello"].hash(state2);
assert_eq!(state1, state2);

따라서, 해시를 저시기 하기 위하여 len 값을 같이 끼워넣어야 충돌을 막을 수 있다고 한다.

그런고로, 우리의 TMLL 프로젝트에서 구현한 Hash 내용물을 잠깐 보여주자면 다음과 같이 생겼다.

impl<T: Hash> Hash for LinkedList<T> {
    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
        self.len().hash(state); // ⬅️ HERE!!
        for item in self {
            item.hash(state);
        }
    }
}